
const _ = require('lodash')
const path = require('path')
const PermissionAPIDao  = require(path.join(process.cwd(), 'dao/PermissionAPIDao'))

module.exports.getAllRights = function (type, cb) {
    if(!type || (type != "list" && type != "tree")) cb("参数类型错误");
	
    PermissionAPIDao.list((err, permissions) => {
        if(err) return cb('获取权限数据失败')

        if (type == 'list') {
            let result = []
            for (idx in permissions) {
                permission = permissions[idx]
                result.push({
                    id: permission.ps_id,
                    authName: permission.ps_name,
                    level: permission.ps_level,
                    pid: permission.ps_pid,
                    path: permission.ps_api_path
                })
            }
            cb(null, result)
        } else {
            var keyCategories = _.keyBy(permissions,'ps_id');

			// 显示一级
			var permissionsResult = {};

			// 处理一级菜单
			for(idx in permissions) {
				permission = permissions[idx];
				if(permission && permission.ps_level == 0) {
					permissionsResult[permission.ps_id] = {
						key:permission.ps_id,
						title:permission.ps_name,
						path:permission.ps_api_path,
						pid : permission.ps_pid,
						children:[]
					};
				}
			}

			// 临时存储二级返回结果
			tmpResult = {};
			// 处理二级菜单
			for(idx in permissions) {
				permission = permissions[idx];
				if(permission && permission.ps_level == 1) {

					parentPermissionResult = permissionsResult[permission.ps_pid];
					if(parentPermissionResult) {
						tmpResult[permission.ps_id] = {
							key:permission.ps_id,
							title:permission.ps_name,
							path:permission.ps_api_path,
							pid : permission.ps_pid,
							children:[]
						}
						parentPermissionResult.children.push(tmpResult[permission.ps_id]);
					}
				}
			}

			// 处理三级菜单
			for(idx in permissions) {
				permission = permissions[idx];
				if(permission && permission.ps_level == 2) {

					parentPermissionResult = tmpResult[permission.ps_pid];

					if(parentPermissionResult) {
						
						parentPermissionResult.children.push({
							key:permission.ps_id,
							title:permission.ps_name,
							path:permission.ps_api_path,
							pid : permission.ps_pid + "," + keyCategories[permission.ps_pid].ps_pid
						});
					}
				}
			}

			cb(null,_.values(permissionsResult));
        }
    })
}